package com.nowcoder.community.service;

import com.nowcoder.community.pojo.LoginTicket;
import com.nowcoder.community.pojo.User;
import com.nowcoder.community.util.CommunityConstant;
import org.springframework.security.core.GrantedAuthority;

import java.util.Collection;
import java.util.Map;

public interface UserService{
    /**
     * 根据用户id查询用户
     * @param userId 用户id
     * @return 查询出的用户
     */
    User findUserById(int userId);

    /**
     * 注册用户
     * @param user 用户示例
     * @return
     */
    Map<String, Object> register(User user);

    /**
     * 激活
     * @param userId 用户id
     * @param code 激活码
     * @return
     */
    int activation(int userId, String code);

    /**
     * 登录
     * @param username 登录用户名
     * @param password 登录密码
     * @param expireSeconds 每次登录的有效时间
     * @return 返回登录结果，如果为null，登录成功
     */
    Map<String, Object> login(String username, String password, int expireSeconds);

    /**
     * 根据用户凭证获取用户信息
     * @param ticket 用户凭证
     * @return 用户示例
     */
    LoginTicket findLoginTicket(String ticket);

    /**
     * 退出登录
     * @param ticket 登录凭证
     */
    void exit(String ticket);

    /**
     * 更新用户头像
     * @param userId 用户id
     * @param headerUrl 用户头像的存放路径
     * @return 大于0时更新成功
     */
    int updateHeader(int userId, String headerUrl);

    /**
     * 修改用户密码
     * @return 如果map为null，修改成功
     */
    Map<String, Object> updatePassword(String oldPassword, String newPassword, String rePassword);


    /**
     * 注销用户
     */
//    int logoutUser(int id);

    /**
     * 根据用户名查询用户
     * @param username 用户名
     * @return 用户实例
     */
    User findUserByName(String username);

    Collection<? extends GrantedAuthority> getAuthorities(int userId);

}
